'use strict';
const db = uniCloud.database();

/**
 * 云函数：获取用户积分和相关统计信息
 * @param {Object} event - 请求参数
 * @param {string} event.user_id - 用户ID
 * @returns {Object} - 用户积分和统计数据
 */
exports.main = async (event, context) => {
  const { user_id } = event;
  
  // 打印传入的参数，调试用
  console.log('传入的用户ID:', user_id);
  
  try {
    // 获取用户信息
    const userRes = await db.collection('users').doc(user_id).get();
    console.log('用户信息:', userRes.data);  // 打印返回的用户数据
    
    // 检查用户是否存在
    if (userRes.data.length === 0) {
      console.error('用户不存在');
      return { code: -1, msg: '用户不存在' };
    }
    
    const user = userRes.data[0];

    // 计算注册天数
    const createdAt = new Date(user.created_at);
    const currentDate = new Date();
    const registrationDays = Math.floor((currentDate - createdAt) / (1000 * 3600 * 24));  // 计算天数差
    const registrationDaysAdjusted = Math.max(1, registrationDays);  // 如果天数差为0，则认为注册了1天
    console.log('用户注册时间:', createdAt);
    console.log('当前时间:', currentDate);
    console.log('注册天数计算结果:', registrationDays);
    console.log('调整后的注册天数:', registrationDaysAdjusted);

    // 获取答题记录总数（高效方式）
    const countRes = await db.collection('answer_history')
      .where({ user_id })
      .count();
    const totalQuestions = countRes.total;
    console.log('总答题数:', totalQuestions);

    // 分批获取答题记录计算正确数（避免一次性获取过多数据）
    let correctCount = 0;
    const batchSize = 100; // 每批获取100条
    let offset = 0;
    
    while (offset < totalQuestions) {
      const answerHistoryRes = await db.collection('answer_history')
        .where({ user_id })
        .skip(offset)
        .limit(batchSize)
        .get();
      
      correctCount += answerHistoryRes.data.filter(item => item.correct).length;
      offset += batchSize;
    }
    console.log('正确答题数:', correctCount);

    // 计算答题正确率
    const correctRate = totalQuestions > 0 ? ((correctCount / totalQuestions) * 100).toFixed(2) : 0;
    console.log('答题正确率:', correctRate);

    // 返回结果
    return {
      code: 0,
      data: {
        points: user.points || 0,               // 用户积分（注意原代码有拼写错误，应为points）
        consecutiveDays: user.consecutive_days || 0, // 连续签到天数
        registrationDays: registrationDaysAdjusted,  // 注册天数
        totalQuestions,                          // 总答题数
        correctRate,                             // 答题正确率
      },
      msg: '获取积分和统计信息成功'
    };
  } catch (e) {
    console.error('获取积分失败:', e);
    return { code: -1, msg: '获取积分失败' };
  }
};